/**
 * 
 */
package br.gov.sjc.aluguelsocial;

import br.gov.sjc.classes.NumeroSias;
import br.gov.sjc.dao.BaseDAO;
import br.gov.sjc.utils.Sair;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

/**
 * @author rodrigo.ramos
 *
 */
public class GrupoFamiliarActivity extends Sair  {
	public static final String KEY_NOMECOLUNA = "Nome";
	private static final String TAG = "GrupoFamiliarActivity";
	//public static final String KEY_NOMECOLUNA = "ids";
	public static int id = -1;

	//Declara base de dados
	public static SQLiteDatabase BancoDados = null;
	public static String nomeBanco = BaseDAO.DATABASE_NAME;
	public void openDB(){
		try{ 
			BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			Log.v("GrupoFamiliarActivity", "BancoDados.openOrCreateDatabase();");
		}catch (Exception E){
			Log.e("GrupoFamiliarActivity", "Erro em BancoDados.close();"+E.getMessage());
		} 
	}
	public void closeDB(){
		BancoDados.close();
		Log.v("GrupoFamiliarActivity", "BancoDados.close();");
	}


	//Declara base de dados
	//SQLiteDatabase BancoDados = AluguelSocialAct.BancoDados ;

	// Declara Buttons
	Button btnGFVoltar, btnGFIr, btnGFNovo;

	//Pega o numero do Sias em uso atual
	NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int idMembroSias = ns.getNumeroDoMembroDaFamilia();

	//ListView
	ListView lvGFamiliar;

	//Declara Cursor
	Cursor cGFVerifica;
	//Declara Cursor
	Cursor Verifica;


	//Declara Veriavel da ListView 
	SimpleCursorAdapter adpGFLista;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.grupofamiliar);
		registerBaseActivityReceiver();
		

		lvGFamiliar = (ListView) findViewById(R.grupofamiliar.lvGFamiliar);
		btnGFVoltar = (Button) findViewById(R.grupofamiliar.btnVoltar);
		btnGFIr = (Button) findViewById(R.grupofamiliar.btnIr);
		btnGFNovo = (Button) findViewById(R.grupofamiliar.btnNovoMembro);


		/** Acao do botao Voltar */
		btnGFVoltar.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {

				/** InitComponents */
				Intent ittGFVoltar = new Intent(getApplicationContext(), BeneficioMainAct.class);
				
				startActivity(ittGFVoltar);
			}
		});//fim acao do botao voltar

		/** Acao do botao Prox */
		btnGFIr.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				validaRegistros();
			}
		});//fim acao do botao Px

		/** Acao do botao Novo */
		btnGFNovo.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				/** InitComponents */

				novoMembro();
				Intent ittGFNovo = new Intent(getApplicationContext(), NomeActivity.class);
				//closeDB();
				startActivity(ittGFNovo);

			}
		});//fim acao do botao Novo

		lvGFamiliar.setOnItemClickListener(new OnItemClickListener(){
			public void onItemClick(AdapterView<?> arg0, View arg1, int Posicao, long arg3){
				Log.w(TAG, "OnItemClickListener() Posicao= "+Posicao+" id="+id+	" arg0="+arg0+" arg3="+arg3+" arg1="+arg1);
				
				Log.w(TAG, "OnItemClickListener() arg3="+arg3+" NumSias="+NumSias);
				setarDados(arg3,NumSias);
			}
		});
	}
	protected void validaRegistros() {
		int erro = 0;
		/** InitComponents */
		if (temParentescoNull(NumSias)){
			Log.e(TAG,"validaRegistros() - temParentescoNull(NumSias) == TRUE");
			erro++;
		}
		if(!temTitular(NumSias)){
			Log.e(TAG,"validaRegistros() - !temTitular(NumSias) == FALSE");
			erro++;
		}
		if (erro==0){
			Intent ittGFIr = new Intent(getApplicationContext(), AluguelSocialAct.class);
			//closeDB();
			Log.i(TAG,"validaRegistros - Sem Erros");
			startActivity(ittGFIr);
		}else{
			Log.e(TAG,"validaRegistros - Houve erros");
		}
	}
	public boolean temTitular(int NumeroSias){
		boolean Retorno = false;
		openDB();
		try{
			String SQLQuery = "Select * from tab_Nome WHERE Titular=\"Sim\" AND SiasN="+NumeroSias;
			Cursor cVerifica2 = BancoDados.rawQuery(SQLQuery, null);
			int counter = cVerifica2.getCount();
			cVerifica2.moveToFirst();
			if ( counter == 1 ){
				Retorno = true;
				Log.i(TAG, "temTitular() true ");
			}else{
				Toast.makeText(this, "É necessário atribuir um titular para a Família", Toast.LENGTH_LONG).show();
			}
		}catch (Exception Err){
			Log.e(TAG, "temTitular() "+Err.getMessage());
		}
		closeDB();
		return Retorno;
	}
	protected boolean temParentescoNull(int NumeroSias) {
		boolean retorno =false;
		openDB();
		try {
			String SQLQuery = "Select * from tab_Nome WHERE Parentesco is null AND Excluido=\"Não\" AND SiasN="+NumeroSias;
			Cursor sdVerifica = BancoDados.rawQuery(SQLQuery, null);
			int counter = sdVerifica.getCount();
			sdVerifica.moveToFirst();
			if (counter > 0){
				retorno = true;
				Toast.makeText(this, "É necessário preencher o Parentesco de todos os membros", Toast.LENGTH_LONG).show();
			}
		}catch (Exception Er){
			mensagemAlerta("Erro","Erro Encontrado");
			Log.e(TAG, "parentescoPreenchido() Erro: "+Er.getMessage());
		}
		closeDB();
		return retorno;
	}
	public void setarDados(long _id, int NumeSias ){
		openDB();
		/**
		 * 1. pega o ID clicado
		 * 2. pega o idMembro deste ID na tabela
		 * 3. add o idMembro em NumeroSias.class
		 * 4. Envia para a act Nome
		 */
		try {
			Log.v("GrupoFamiliarActivity", "setarDados() Início SiasN= "+NumeSias+" _id="+_id+" --------------");
			String SQLQuery = "Select * from tab_GrupoFamiliar WHERE _id="+_id+" Order By idMembro ASC";
			Log.v("GrupoFamiliarActivity", "setarDados() SQLQuery= "+SQLQuery);
			int idMembroN;
			int numerodosias;
			int id;
			Cursor sdVerifica;
			sdVerifica = BancoDados.rawQuery(SQLQuery, null);
			int counter = sdVerifica.getCount();
			sdVerifica.moveToFirst();
			if (counter != 0){
				do{
					idMembroN = sdVerifica.getInt(sdVerifica.getColumnIndex("idMembro"));
					numerodosias = sdVerifica.getInt(sdVerifica.getColumnIndex("SiasN"));
					id = sdVerifica.getInt(sdVerifica.getColumnIndex("_id"));
					Log.v("GrupoFamiliarActivity", "setarDados() numerodosias= "+numerodosias+" idMembroN= "+idMembroN+" id="+id);
				}while(sdVerifica.moveToNext());
				ns.setNumeroDoMembroDaFamilia(idMembroN);

				Intent ittGFVelho = new Intent(getApplicationContext(), NomeActivity.class);
				Log.i("GrupoFamiliarActivity", "setarDados() OK "+idMembroN+"/"+NumeSias);
				closeDB();
				startActivity(ittGFVelho);
			} else {
				Log.e("GrupoFamiliarActivity", "setarDados() Não encontrado nada no select: "+SQLQuery);
				mensagemAlerta("","Sem Dados");
			}
		}catch (Exception Er){
			mensagemAlerta("Erro","Erro Encontrado");
			Log.e("GrupoFamiliarActivity", "setarDados() Erro: "+Er.getMessage());
		}finally{

			Log.v("GrupoFamiliarActivity", "setarDados() closeDB");
		}
		closeDB();
	}
	public void novoMembro() {
		openDB();
		ns.setNumeroDaFamilia(NumSias);
		ns.addNumeroDoMembroDaFamilia(BancoDados);
		closeDB();
	}
	public boolean verificaRegistro(){
		boolean Retorno = false;
		openDB();
		Verifica =null;
		try{
			Log.v("GrupoFamiliarActivity", "verificaRegistro() Início SiasN= "+NumSias);
			String SQLQuery = "Select * from tab_GrupoFamiliar WHERE SiasN="+NumSias+" Order By idMembro ASC";
			//String SQLQuery = "Select * from tab_Nome WHERE SiasN="+NumSias+" Order By idMembro ASC";
			Verifica = BancoDados.rawQuery(SQLQuery, null);
			int counter = Verifica.getCount();
			Verifica.moveToFirst();

			if ( counter !=0 ){
				Retorno = true;
				Log.i("GrupoFamiliarActivity", "verificaRegistro() !=0  e counter="+counter);
			}else{
				Log.e("GrupoFamiliarActivity", "Erro: Verifica.getCount() =0 e counter="+counter);
			}
		}catch (Exception Err){
			mensagemAlerta("Erro","Erro Encontrado");

			Log.e("GrupoFamiliarActivity", "Erro: "+Err.getMessage());
		}
		closeDB();
		return Retorno;
	}


	public void salvaDados(int string, int string2, String string3){
		openDB();
		try{
			String SQL = "INSERT INTO tab_GrupoFamiliar(SiasN, idMembro ,  Desc ) VALUES ("+string+", "+string2+",'"+string3+"')";
			BancoDados.execSQL(SQL);
			Toast.makeText(this, "Gravando Dados da Família:"+NumSias+"/"+idMembroSias, Toast.LENGTH_LONG).show();
			Log.i("GrupoFamiliarActivity", "salvaDados passou");
		}catch(Exception erro) {
			mensagemAlerta("Erro","Erro Ao Gravar ");
			Log.e("GrupoFamiliarActivity", "Erro: "+erro.getMessage());
		}
		closeDB();
	}
	public void atualizaDados(int string, int string2, String string3){
		try{
			openDB();
			String SQL = "UPDATE tab_GrupoFamiliar SET " +
					"Desc='"+string3+"' " +
					" WHERE SiasN = "+string+" " +
					" AND idMembro="+string2+" ";
			BancoDados.execSQL(SQL);

			Toast.makeText(this, "Gravando Dados da Família:"+NumSias+"/"+idMembroSias, Toast.LENGTH_LONG).show();
			Log.i("GrupoFamiliarActivity", "atualizaDados passou");
		}catch(Exception erro) {
			mensagemAlerta("Erro","Erro Ao Gravar ");
			Log.e("GrupoFamiliarActivity", "atualizaDados Erro: "+erro.getMessage());
		}
		closeDB();
	}

	public void mensagemAlerta(String AlertTitle, String MSGAlert){
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(GrupoFamiliarActivity.this);
		Mensagem.setTitle(AlertTitle);
		Mensagem.setMessage(MSGAlert);
		Mensagem.setNeutralButton("Ok", null);
		Mensagem.show();
	}

	public void encontraNome(){
		openDB();
		cGFVerifica = null;
		Log.v("GrupoFamiliarActivity", "encontraNome() Iniciou");
		try{
			//String SQL2 = "SELECT * FROM tab_Nome WHERE SiasN="+NumSias+" ";
			String SQL2 ="Select GF.SiasN||'/'||GF.idMembro||'/'||GF._id||'/'||N._id||'/'||N.Nome as ids, N._id,N.Nome||' / Excluído:'||N.Excluido as Nome "+  
					" From [tab_GrupoFamiliar] as GF, [tab_Nome] as N "+ 
					" WHERE GF.SiasN = N.SiasN AND GF.[idMembro] = N.[idMembro] " +
					" AND GF.[SiasN]="+NumSias;
			cGFVerifica = BancoDados.rawQuery(SQL2, null);
			Log.v(TAG, "cGFVerifica "+cGFVerifica.toString());
			
			cGFVerifica.moveToFirst();
			Log.i("GrupoFamiliarActivity", "encontraNome() TRUE");

		} catch (Exception e){
			Log.e("GrupoFamiliarActivity", "encontraNome() ERRO: "+e.getMessage());

		}
		closeDB();
	}



	public void carregaDado(){
		
		if (verificaRegistro()) {
			encontraNome();
			String [] Coluna = new String [] {KEY_NOMECOLUNA};
			adpGFLista = new SimpleCursorAdapter(
					GrupoFamiliarActivity.this, 
					R.layout.grupofamiliartw, 
					cGFVerifica, Coluna, 
					new int[] {R.grupofamiliar.lblgfCarregaDado}
					);
			Log.w(TAG, Coluna.toString());
			lvGFamiliar.setAdapter(adpGFLista);
			Log.i("GrupoFamiliarActivity", "carregaDado passou");
		} else{
			Toast.makeText(GrupoFamiliarActivity.this, "Sem Dados Para Exibir", Toast.LENGTH_LONG).show();
			Log.i("GrupoFamiliarActivity", "Sem Dados Para Exibir");
		}
	}

	@Override
	protected void onResume() {
		//quando a Activity main receber o foco novamente abre-se novamente a conexão
		
		//método responsável pela atualiza da lista de dados na tela
		//adapter.notifyDataSetChanged();
		carregaDado();

		super.onResume();
	}
	@Override
	protected void onPause() {

		//toda vez que o programa peder o foco fecha-se a conexão com o BD
		
		super.onPause();
	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unRegisterBaseActivityReceiver();
		finish();
		
	}
}
